package edu.nuc.ahm.juc.callable;

import java.util.concurrent.Callable;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.FutureTask;

public class CallableTest {
    public static void main(String[] args) throws ExecutionException, InterruptedException {

      //  new Thread(new FutureTask(new Callable))).start(); // 怎么启动

      MyThread thread = new MyThread();
      FutureTask<String> stringFutureTask = new FutureTask<>(thread); // 适配类
      new Thread(stringFutureTask,"A").start();
      new Thread(stringFutureTask,"B").start(); // 结果会被缓存提高效率 结果可能需要等待 会阻塞
      String s = stringFutureTask.get();   // 这个get 方法可能会产生阻塞 耗时的操作 所以一般把它放到最后 或者通过异步通信的方式
      System.out.println(s);
    }
}
/*
* 泛型的参数 等于 方法的 返回值
* */
class MyThread implements Callable<String > {

    @Override
    public String call() throws Exception {
        System.out.println("call");
        return "你好呀";
    }
}
